package ChessEngine;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

import ChessEngine.moveGenerator.Exceptions.BoardException;
import boardData.Board;

/**
 * Die Klasse Abstract Search stellt die Schnittstelle dar, die ein Suchalgorithmus
 * mindestens erfüllen muss und stellt methoden bereit um eine neue Suche zu starten und diese zu unterbrechen.
 * @author daniel
 */
public abstract class AbstractSearch {

	public AbstractSearch() {
	}

	/**
	 * unterbricht die Suche und teilt der GUI unter zuHilfenahme der Phalanx
	 * den bis dato besten gefundenen Zug zurück
	 * Rueckgabewert Boolean, damite evtl ueberprueft werden kann ob Suche
	 * beendet wurde. 
	 */
	public abstract boolean stopSearching();

	/**
	 * Diese Methode wird von der Main Engine aufgerufen um den nächsten Zug zu berechnen
	 */
	public abstract String calculateNextMove(Board b, boolean white, long millisToCalc) throws BoardException;

	/**
	 * die maximale tiefe bei der die Suche abgebrochen wird.
	 * die Tiefe entspricht der Anzahl der Halbzüge die durchsucht wird
	 */
	public static final int SEARCH_DEPTH = 24;


}
